/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package servlets;

import DTOs.DTOHotel;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author williamprado
 */
public class hotelsServlet extends HttpServlet {
   
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

     HttpSession currentSession = request.getSession();
     String action = request.getParameter("action");
     try{
         if(action == null){
             currentSession.setAttribute("error", "Lo sentimos. Ha ocurrido un error procesando la solicitud.");
             response.sendRedirect("error.jsp");
         }else if(action.equals("searchHotels")){
                String cou = "";  
                String fecha1 = "";
                String fecha2 = "";
                String idciudad = "";
                int idc = 0;
                businessDelegate.BusinessDelegate bd = new businessDelegate.BusinessDelegate();
                try{
                    fecha1 = request.getParameter("date1");
                    fecha2 = request.getParameter("date2");
                    idciudad = request.getParameter("city");
                    try{
                        idc = Integer.parseInt(idciudad);
                    }catch(Exception e){
                        idc = 0;
                    }
                    List<DTOs.DTOHotel> hotels = bd.hotelesDisponibles();
                    System.out.println(hotels.size());
                    currentSession.setAttribute("hotelDate1", fecha1);
                    currentSession.setAttribute("hotelDate2", fecha2);
                    currentSession.setAttribute("hotelCity", idc);
                    System.out.println("f1 "+fecha1);
                    System.out.println("f2 "+fecha2);
                    System.out.println("id c "+idc);
                    currentSession.setAttribute("hotelsList", hotels);
                    response.sendRedirect("buscarHoteles.jsp");
                }catch(Exception ex){
                    String mensaje="Ocurrio un error <br>";
                    mensaje=mensaje+ex.getMessage();
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("buscarHoteles.jsp").include(request, response);
                }
         }else if(action.equals("makeReservation")){
             String date1 = currentSession.getAttribute("hotelDate1").toString();
             String date2 = currentSession.getAttribute("hotelDate2").toString();
             String idc = currentSession.getAttribute("hotelCity").toString();
             String idr = request.getParameter("roomId");
             System.out.println("d1 "+date1);
             System.out.println("d2 "+date2);
             int idRoom = 0;
             int roo = -1;
             List<DTOs.DTOHotel> hotels = (List<DTOs.DTOHotel>) currentSession.getAttribute("hotelsList");
             List<DTOs.DTOHotel> hotelsCart = (List<DTOs.DTOHotel>) currentSession.getAttribute("DTOH");
             if(hotels == null || idc == null || idr == null || idc.equals("") || idr.equals("")){
                    String mensaje="Ha ocurrido un error";
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("buscarHoteles.jsp").include(request, response);
             }
             try{
                    idRoom = Integer.parseInt(idr);
                    System.out.println("id hab "+idRoom);
             }catch(Exception e){
                String mensaje="Ha ocurrido un error al agregar al carro de compra <br> Error: el ID del hotel es invalido";
                request.setAttribute("error", mensaje);
                request.getRequestDispatcher("buscarHoteles.jsp").include(request, response);
             }
             for(int i=0; i<hotels.size();i++){
                if(idRoom == hotels.get(i).getIdHabitacion()){
                    roo = i;
                }
            }
            System.out.println("la ubicacion dl vo en la lista es "+roo);
            System.out.println("el id dl form "+idRoom);
            if(roo == -1){
                    String mensaje="Ha ocurrido un error al agregar al carro de compra <br> Error: el ID del hotel es invalido";
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("buscarHoteles.jsp").include(request, response);
            }
            if(hotelsCart == null){
                hotelsCart = new ArrayList<DTOHotel>();
                hotelsCart.add(hotels.get(roo));
            }else{
                boolean exists = false;
                for(int i =0; i<hotelsCart.size();i++){
                    if(idRoom == hotelsCart.get(i).getIdHabitacion()){
                        exists = true;
                    }
                }
                if(exists){
                    String mensaje="El hotel ya esta en el plan";
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("buscarHoteles.jsp").include(request, response);
                }else{
                    hotelsCart.add(hotels.get(roo));
                }
            }
            currentSession.setAttribute("DTOH", hotelsCart);
            String mensaje="La reserva de hotel se ha agregado al plan";
            request.setAttribute("error", mensaje);
            request.getRequestDispatcher("buscarHoteles.jsp").include(request, response);
         }else if(action.equals("remove")){
            int listPlace = -1;
            int idRoom = 0;
            String place = request.getParameter("pl");
            String idr = request.getParameter("id");
            List<DTOs.DTOHotel> hotelsCart = (List<DTOs.DTOHotel>) currentSession.getAttribute("DTOH");
            if(hotelsCart == null || place == null || idr == null || place.equals("") || idr.equals("")){
                String mensaje="Ha ocurrido un error";
                request.setAttribute("error", mensaje);
                request.getRequestDispatcher("carro.jsp").include(request, response);
            }else{
                try{
                    listPlace = Integer.parseInt(place);
                    idRoom = Integer.parseInt(idr);
                    System.out.println("ubicacion lista "+listPlace);
                }catch(Exception e){
                    String mensaje="Ha ocurrido un error al eliminar del carro de compra <br> Error: el ID del hotel es invalido";
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("carro.jsp").include(request, response);
                }
                if(listPlace == -1){
                    String mensaje="Ha ocurrido un error al eliminar del carro de compra <br> Error: el ID del hotel es invalido";
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("carro.jsp").include(request, response);
                }
                boolean exists = false;
                if(hotelsCart.get(listPlace) != null){
                    if(idRoom == hotelsCart.get(listPlace).getIdHabitacion()){
                        exists = true;
                    }
                }else{
                    String mensaje="Ha ocurrido un error al eliminar del carro de compra <br> Error: el ID del hotel es invalido";
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("carro.jsp").include(request, response);
                }
                if(!exists){
                    String mensaje="La reserva de hotel no puede eliminarse del carro porqu no está en el plan";
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("carro.jsp").include(request, response);
                }else{
                    hotelsCart.remove(listPlace);
                }
                currentSession.setAttribute("DTOH", hotelsCart);
                String mensaje="La reserva de hotel se ha eliminado del plan";
                request.setAttribute("error", mensaje);
                request.getRequestDispatcher("carro.jsp").include(request, response);
            }
         }
        }catch(Exception e){
            System.out.println("error");
            response.sendRedirect("index.jsp");
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
